<?php

/**
 * @author Watanabex
 * @copyright 2012
 * Nota DAO
 */
require('to/Nota.php');
require_once('comentariosDAO.php');
require_once('seccionesDAO.php');

class NotasDAO{
    //const SEL_COL_RODRIGO = "SELECT n.*, count(c.comentid) as numComments FROM notas n LEFT JOIN comentarios c ON n.notaid= c.notaid WHERE n.seccionid = 20 AND n.status = 'A' ORDER BY n.fechaPublicacion DESC LIMIT 1";
	//para left y right sidebar
    const SEL_COL_RODRIGO = "SELECT * FROM notas WHERE seccionid = 20 AND status = 'A' ORDER BY fechaPublicacion DESC LIMIT 1";
	const SEL_MAS_TIEMPO = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen
							FROM notas WHERE seccionid = 6 AND fechapublicacion <= curdate()  AND status = 'A'
							ORDER BY fechapublicacion DESC, horapublicacion DESC Limit 1";
	const SEL_MAS_VISTAS = "SELECT * FROM notas WHERE status ='A' and fechapublicacion <= curdate() ORDER BY numVistas DESC LIMIT 5";
	const SEL_MAS_COMENTADAS = "SELECT n.notaid, n.titulo, n.seccionid, n.fechaPublicacion, n.horaPublicacion, n.imagen, count(distinct c.comentid) as numComments
								FROM notas n LEFT JOIN comentarios c ON n.notaid= c.notaid WHERE n.status = 'A' GROUP BY n.notaid
								ORDER BY numComments DESC, n.fechaPublicacion DESC, n.horaPublicacion DESC  LIMIT 5";
	const SEL_EN_RESUMEN_FP = "SELECT notaid, seccionid, descripcion, titulo, imagen, fechaPublicacion, horaPublicacion, numVistas FROM notas WHERE status ='A' AND fechaPublicacion <= curdate() AND horaPublicacion >= '00:00:00' ORDER by fechaPublicacion DESC, horaPublicacion DESC LIMIT 5";
    const SEL_ESQUINA_NARANJA = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen
							FROM notas WHERE seccionid = 30 AND fechapublicacion <= curdate()  AND status = 'A'
							ORDER BY fechapublicacion DESC, horapublicacion DESC Limit 4";
	const SEL_GADGETS = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen
							FROM notas WHERE seccionid = 29 AND fechapublicacion <= curdate()  AND status = 'A'
							ORDER BY fechapublicacion DESC, horapublicacion DESC Limit 2";

	//para index
	const SEL_PRINCIPAL = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen FROM notas WHERE status='A' AND principal=1 OR fuePrincipal=1 ORDER BY principal DESC, fechaPublicacion DESC LIMIT 10";
	const SEL_TOP5 = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen FROM notas WHERE status='A' AND top5=1 OR fechaPublicacion <= curdate() ORDER BY fechaPublicacion DESC LIMIT 5";
	const SEL_TOP5_POR_SECCION = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen FROM notas WHERE status='A' AND seccionid = %d AND fechaPublicacion <= curdate() ORDER BY fechaPublicacion DESC LIMIT 5";
	const SEL_MUNICIPIOS_TOP5 = "SELECT n.notaid, n.seccionid, n.titulo, n.descripcion, n.fechaPublicacion, n.horaPublicacion, n.numVistas, n.imagen FROM notas n LEFT JOIN secciones s ON n.seccionid = s.seccionid  WHERE s.subseccionid = 8 AND n.status = 'A' AND n.fechaPublicacion <= curdate() ORDER BY n.fechaPublicacion DESC, n.horaPublicacion DESC LIMIT 5";

	// Para secciones
	const SEL_POR_SECCION = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen FROM notas WHERE status='A' AND fechaPublicacion <= curdate() AND seccionid = %d ORDER BY fechaPublicacion DESC LIMIT 25";
	const SEL_SECCION_MUNICIPIOS = "SELECT n.notaid, n.seccionid, n.titulo, n.descripcion, n.fechaPublicacion, n.horaPublicacion, n.numVistas, n.imagen FROM notas n LEFT JOIN secciones s ON n.seccionid = s.seccionid  WHERE s.subseccionid = 8 AND n.status = 'A' AND n.fechaPublicacion <= curdate() ORDER BY n.fechaPublicacion DESC, n.horaPublicacion DESC LIMIT 25";
    //columnas
    const SEL_COLUMNAS_FECHA = "SELECT notaid, seccionid, titulo, descripcion, fechaPublicacion, horaPublicacion, numVistas, imagen FROM notas WHERE seccionID IN (20, 26) AND status = 'A' AND fechaPublicacion BETWEEN '%s' AND '%s' ORDER BY fechaPublicacion DESC, horaPublicacion DESC LIMIT 35";
    //resumen
    const SEL_RESUMEN_MAIN = "SELECT notaid, seccionid, descripcion, titulo, imagen, fechaPublicacion, horaPublicacion, numVistas FROM notas WHERE status ='A' AND fechaPublicacion = curdate() AND horaPublicacion BETWEEN '00:00:00' AND '23:59:59' ORDER by fechaPublicacion DESC, horaPublicacion DESC";
	//verNota
	const SEL_NOTA = "SELECT * FROM notas WHERE status='A' AND notaid = %d";
    const UP_NUMVISTAS = "UPDATE notas SET numVistas = numVistas + 1 WHERE status='A' AND notaid = %d";

    public static function destroyInstance(){
        $DB = DBFunctions::destroyInstance();
    }

    public static function verNota($notaid){
        $sSql = self::UP_NUMVISTAS;

        $DB = DBFunctions::getInstance();
        $arrNotas = $DB->execQ($sSql, array($notaid));

        return $arrNotas;
    }

	public static function getNota($notaid){
		$sSql = self::SEL_NOTA;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array($notaid));

		return self::populate($arrNotas);
	}

    public static function getEnResumenMain(){
        $sSql = self::SEL_RESUMEN_MAIN;

        $DB = DBFunctions::getInstance();
        $arrNotas = $DB->execSelect($sSql, array());

        return self::populateFrontPage($arrNotas);
    }

    public static function getColumnasPorFecha($mes, $ano){
        $fechaInicio = null;
        $fechaFinal = null;
        switch($mes){
            case 2:
                $fechaInicio = $ano."-".$mes."-01";
                $fechaFinal = $ano."-".$mes."-28";
                break;
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                $fechaInicio = $ano."-".$mes."-01";
                $fechaFinal = $ano."-".$mes."-31";
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                $fechaInicio = $ano."-".$mes."-01";
                $fechaFinal = $ano."-".$mes."-30";
                break;
            default:
                $fechaInicio = date("Y")."-".date("m")."-01";
                $fechaFinal = date("Y-m-d");
                break;
        }

        $sSql = self::SEL_COLUMNAS_FECHA;

        $DB = DBFunctions::getInstance();
        $arrNotas = $DB->execSelect($sSql, array($fechaInicio, $fechaFinal));

        return self::populateFrontPage($arrNotas);
    }

    public static function getNotasPorSeccion($seccionid){
		if ($seccionid==8) { //8 es el id de municipios
			$sSql = self::SEL_SECCION_MUNICIPIOS;
		} else {
			$sSql = self::SEL_POR_SECCION;
		}


		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array($seccionid));

		return self::populateFrontPage($arrNotas);
	}

	public static function getTop5Municipios(){
		$sSql = self::SEL_MUNICIPIOS_TOP5;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

	public static function getTop5PorSeccion($seccionid){
		$sSql = self::SEL_TOP5_POR_SECCION;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array($seccionid));

		return self::populateFrontPage($arrNotas);
	}

	public static function getTop5(){
		$sSql = self::SEL_TOP5;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

	public static function getPrincipal(){
		$sSql = self::SEL_PRINCIPAL;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

	public static function getGadgets() {
		$sSql = self::SEL_GADGETS;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

    public static function getEsquinaNaranja() {
        $sSql = self::SEL_ESQUINA_NARANJA;

        $DB = DBFunctions::getInstance();
        $arrNotas = $DB->execSelect($sSql, array());

        return self::populateFrontPage($arrNotas);
    }

	public static function getEnResumenFP() {
		$sSql = self::SEL_EN_RESUMEN_FP;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

	public static function getMasComentadas() {
		$sSql = self::SEL_MAS_COMENTADAS;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

	public static function getMasVistas() {
		$sSql = self::SEL_MAS_VISTAS;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

    public static function getMasTiempo() {
		$sSql = self::SEL_MAS_TIEMPO;

		$DB = DBFunctions::getInstance();
		$arrNotas = $DB->execSelect($sSql, array());

		return self::populateFrontPage($arrNotas);
	}

	public static function getColRodrigo() {
        $sSql = self::SEL_COL_RODRIGO;

        $DB = DBFunctions::getInstance();
        $arrNotas = $DB->execSelect($sSql, array());

        return self::populateFrontPage($arrNotas);
    }

	private static function populateFrontPage($arrNotas) {
		$objNotas = array();

		foreach($arrNotas as $A){
			$objNota = new Nota();
			$objNota->setNotaID($A["notaid"]);
			$objNota->setTitulo(isset($A["titulo"]) ? $A["titulo"] : "");
			$objNota->setDescripcion(isset($A["descripcion"]) ? $A["descripcion"] : "");
			$objNota->setImagen(isset($A["imagen"]) ? $A["imagen"] : "");
			$objNota->setFechaPublicacion(isset($A["fechaPublicacion"]) ? $A["fechaPublicacion"] : "");
			$objNota->setHoraPublicacion(isset($A["horaPublicacion"]) ? $A["horaPublicacion"] : "");
			$objNota->setNumVistas(isset($A["numVistas"]) ? $A["numVistas"] : "");
            $objNota->setSeccionID(isset($A["seccionid"]) ? $A["seccionid"] : "");

			$secciones = new seccionesDAO();
			$seccion_nombre = $secciones->getSeccionById($A["seccionid"]);

			$comentarios = new ComentariosDAO();;
			$numComments = $comentarios->countComentariosPorNota($A["notaid"]);

			$objNota->setSeccionNombre($seccion_nombre[0]->getNombre());
			$objNota->setNumComments($numComments);

			array_push($objNotas, $objNota);
		}
		return $objNotas;
	}

    /*This function get's the result array and builds an advertiser array object
      * @param array Advertisers result
      * @returns array with Advertisers objects */
    private static function populate($arrNotas){

        $objNotas = array();

        foreach($arrNotas as $A){
            $objNota = new Nota();
            $objNota->setNotaID($A["notaid"]);
            $objNota->setTitulo($A["titulo"]);
            $objNota->setDescripcion($A["descripcion"]);
            $objNota->setTexto($A["texto"]);
            $objNota->setImagen($A["imagen"]);
            $objNota->setPieFoto($A["piefoto"]);
            $objNota->setSeccionID($A["seccionid"]);
            $objNota->setFechaPublicacion($A["fechaPublicacion"]);
            $objNota->setHoraPublicacion($A["horaPublicacion"]);
            $objNota->setFechaCreado($A["fechaCreado"]);
            $objNota->setCreadoPor($A["creadoPor"]);
            $objNota->setStatus($A["status"]);
            $objNota->setPrincipal($A["principal"]);
            $objNota->setTop5($A["top5"]);
            $objNota->setNumVistas($A["numVistas"]);
            $objNota->setFuePrincipal($A["fuePrincipal"]);
            $objNota->setVideoId($A["video_id"]);
            $objNota->setVideoPosition($A["video_position"]);
            $objNota->setAlbumId($A["album_id"]);
            $objNota->setAlbumPosition($A["album_position"]);
            $objNota->setAudioId($A["audio_id"]);
            $objNota->setAudioPosition($A["audio_position"]);

			$secciones = new seccionesDAO();
			$seccion_nombre = $secciones->getSeccionById($A["seccionid"]);

            $comentarios = new ComentariosDAO();
            $numComments = $comentarios->getComentariosPorNotaId($A["notaid"]);

			$objNota->setSeccionNombre($seccion_nombre[0]->getNombre());
            $objNota->setNumComments($numComments);

            array_push($objNotas, $objNota);
        }
        return $objNotas;
    }
}